**Resource Manager**
----------------------
Resource sharing on a high-performance cluster dedicated to scientific
computing is organized by a piece of software called a *resource
manager* or *job scheduler*. Indeed, users do not run software on those
cluster like they would do on a workstation, rather, they must submit
jobs, which are run unattended, by the job scheduler at the time, and on
the resources decided by its algorithm.
`SLURM `__ (Simple Linux utility Resource
manager) is the workload manager and job scheduler for FEDGEN HPC
Cluster. Slurm Workload Manager is an open source, fault-tolerant, and
highly scalable cluster management and job scheduling system for large
and small Linux clusters. It is used by many of the world’s
supercomputers and computer clusters.
The main function of SLURM is to allocate resources within the cluster
to jobs as requested by users. Resources managed by SLURM include:
- Nodes: A Node is a computing instance with one or more cores, memory
and local storage.
- Cores: A complete isolated set of registers, Arithmetic Logic Units
and queues to execute a program.
- Threads: Within each physical core, the operating system is able to
address two virtual cores to increase the number of independent
instruction sets processed.
- Memory: Program execution space
- Accelerators such as GPUs can be managed by SLURM
- License guide: SLURM also assists with license management by assigning
available licenses to jobs at the time of scheduling. If the relevant
license is not available, the job will not be executed and will remain
in the pending state.Machine learning and deep learning models can be
trained in HPC with Tensorflow, PyTorch, Dask or other distributed
computing library.
Read the official `Quick Start User
Guide `__ for an overview of
the architecture, commands and examples.
**Glossary of concepts and terms related to Slurm**
==================================================
**Nodes**
A node is (commonly) the largest part of the cluster running a single
operating system image, and hence capable of supporting a shared
memory program. Nodes are connected with each other through an
interconnect (usually Infiniband or Ethernet), and communication
between nodes is done via message passing.
**CPU**
The CPU is the Computer Processing Unit. Each node in a cluster can
have one or multiple CPUs and each CPU has multiple cores capable of
executing compute instructions.
**Core**
A core is the smallest processor of the CPU. It can execute a
single *thread* of instructions.
**Partition**
Groups of nodes with limits and access controls, basically the
equivalent of a queue in Torque. A node can be part of multiple
partitions.
**Job**
A resource allocation request.
**Job step**
A set of (possibly parallel) tasks within a job. A job can consist of
just a single job step or can contain multiple job steps which may
use all or just a part of the resource allocation of a job and can
run sequentially or in parallel (or a mix of that). The job script
itself is a special job step, called the batch job step, but
additional job steps can be created (e.g., for running a parallel MPI
application).
**Task**
A task is executed within a job step and essentially corresponds to a
Linux process: a single- or multithreaded process, or a single rank
within a MPI process. Specifying the number of tasks one wants to run
simultaneously and the number of cores per task is a very convenient
way to request resources to Slurm as afterwards starting a MPI or
hybrid MPI/OpenMP program using the srun command is very easy.